/**
 * 文件名称:  UserDao.java
 * 所属版权:  Stone Technologies Co., Ltd. Copyright 2010-2021, All rights reserved
 * 简单描述:  <描述>
 * 修改作者:  xdli
 * 修改时间:  2012-6-13
 * 修改内容:  <修改内容>
 */
package com.chinastar.iweb.user.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.chinastar.iweb.common.jdbc.DataType;
import com.chinastar.iweb.common.jdbc.ParameType;
import com.chinastar.iweb.common.jdbc.StarSupport;
import com.chinastar.iweb.common.util.Constuls;
import com.chinastar.iweb.user.domain.UserBean;

/**
 * UserDao
 * 
 * @author xdli
 * @version 2012-6-13
 * @see UserDao
 * @since 1.0
 */
public class UserDao
{
    private StarSupport starSupport = null;
    
    private static final Logger logger = Logger.getLogger(UserDao.class);
    
    public StarSupport getStarSupport()
    {
        return starSupport;
    }
    
    public void setStarSupport(StarSupport starSupport)
    {
        this.starSupport = starSupport;
    }
    
    /**
     * 用户登录
     * 用户登录。只判断用户的登录情况.
     * @param userBean
     * @return
     */
    public UserBean login(UserBean userBean)
    {
        int result = Constuls.NUMBER_100;
        try
        {
            starSupport.setProcedure("p_login(:i_usernum,:i_userpass,:o_ret,:o_cursor)");
            starSupport.addParame("i_usernum", DataType.VARCHAR, userBean.getUserNum(), ParameType.PARAME_IN);
            starSupport.addParame("i_userpass", DataType.VARCHAR, userBean.getUserPass(), ParameType.PARAME_IN);
            starSupport.addParame("o_ret", DataType.INTEGER, null, ParameType.PARAME_OUT);
            starSupport.addParame("o_cursor", DataType.CURSOR, null, ParameType.PARAME_OUT);
            starSupport.execute();
            result = starSupport.getInt("o_ret");
            if (result == Constuls.NUMBER_O)
            {
                ResultSet resultSet = starSupport.getDataSet("o_cursor");
                resultSet.next();
                userBean.setUserName(resultSet.getString("username"));
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return userBean;
    }
    
    /**
     * 查询遍历所有的用户信息
     * 遍历所有的用户信息数据，将所有的数据都遍历出来，通过分页进行将数据进行展现。
     * @return
     */
    public List<UserBean> queryList()
    {
        int result = Constuls.NUMBER_100;
        ResultSet resultSet = null;
        try
        {
            starSupport.setProcedure("p_user_query(:o_ret,:o_cursor)");
            starSupport.addParame("o_ret", DataType.INTEGER, null, ParameType.PARAME_OUT);
            starSupport.addParame("o_cursor", DataType.CURSOR, null, ParameType.PARAME_OUT);
            starSupport.execute();
            result = starSupport.getInt("o_ret");
            if (result == Constuls.NUMBER_O)
            {
                resultSet = starSupport.getDataSet("o_cursor");
                return getResultUser(resultSet);
            }
        }
        catch (Exception e)
        {
            logger.info(e.toString());
        }
        finally
        {
            starSupport.close(resultSet);
        }
        return null;
    }
    
    /**
     * 用户保存信息
     * 保存用户信息。
     * @param userBean
     * @return
     */
    public boolean save(UserBean userBean)
    {
        
        return false;
    }
    
    /**
     * 用户更新数据信息
     * 更新所操作的用户数据信息。
     * @param userBean
     * @return
     */
    public boolean update(UserBean userBean)
    {
        
        return false;
    }
    
    /**
     * 更新用户状态-删除操作
     * 修改用户的使用状态，系统中不提供将数据删除。对于用户只是做一个假删除的标志
     * @param userBean
     * @return
     */
    public boolean chanage(UserBean userBean)
    {
        
        return false;
    }
    
    /**
     * 删除所有的用户
     * 删除数据库所有的用户信息。
     * @return
     */
    public boolean deleteAll()
    {
        try
        {
            starSupport.setProcedure("p_user_deleteAll(:o_ret)");
            starSupport.addParame("o_ret", DataType.INTEGER, null, ParameType.PARAME_OUT);
            starSupport.execute();
            return starSupport.getInt("o_ret") == Constuls.NUMBER_O;
        }
        catch (Exception e)
        {
            logger.info(e.toString());
        }
        finally
        {
            starSupport.close();
        }
        return false;
    }
    
    /**
     * 获取用户信息
     * 通过用户对象的ID编号，获取用户的所有的信息信息。
     * @param userBean
     * @return
     */
    public UserBean get(UserBean userBean)
    {
        
        return null;
    }
    
    /**
     * 获取用户集合
     * 查询用户的所有的数据。
     * @param resultSet
     * @return
     */
    private List<UserBean> getResultUser(ResultSet resultSet)
    {
        List<UserBean> userList = null;
        try
        {
            userList = new ArrayList<UserBean>();
            while (resultSet.next())
            {
                UserBean userBean = new UserBean();
                userBean.setUserNum(resultSet.getString(""));
                userBean.setUserName(resultSet.getString("userName"));
                userList.add(userBean);
            }
        }
        catch (Exception e)
        {
            logger.info(e.toString());
        }
        return userList;
    }
}
